System V シグナル
System V シグナル(System V signal)
signal()、sigset()、sighold()などのAPIはSystem Vのシグナル
manページに代替として提示されているsigaction()、sigprocmask()などはPOSIX シグナル
シグナル用の変数は最適化時に消されないようにvolatileをつけておかないといけない
(ChatGPTChatGPT.iconに書いてもらったサンプルコード)
code:signal.c
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
volatile sig_atomic_t sigint_received = 0;
// SIGINT シグナルを捕捉するためのハンドラ関数
void sigint_handler(int __attribute__((unused)) sig) {
// シグナルを受け取ったことを示すフラグを設定
sigint_received = 1;
}
int main() {
// シグナルハンドラを設定
signal(SIGINT, sigint_handler);
printf("Ctrl+C を押して SIGINT シグナルを送信してください。\n");
// 無限ループでプログラムを実行し続ける
while (!sigint_received) {
// 忙しくないループのために短いスリープを挿入
sleep(1);
}
// シグナルを受け取った後の処理
printf("SIGINT シグナルを受け取りました。\n");
printf("プログラムを終了します。\n");
return 0;
}
$ curl -O https://scrapbox.io/api/code/pogi-log/%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB/signal.c && gcc -Wall -Wextra signal.c && ./a.out
code:output
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 906 0 906 0 0 1014 0 --:--:-- --:--:-- --:--:-- 1014
Ctrl+C を押して SIGINT シグナルを送信してください。
^CSIGINT シグナルを受け取りました。
プログラムを終了します。
確認用
Q. System V シグナル
関連
POSIX シグナル
参考
https://chat.openai.com/share/c1b84f6c-e6a9-46e0-bd24-fe37c44a39db
調査用
Google.icon System V シグナル(日)
Google.icon System v signal(英)
Wikipedia.icon
System V シグナル - Wikipedia(日)
System V シグナル(検索) - Wikipedia(日)
Wikipedia.icon
System v signal - Wikipedia(英)
System v signal(検索) - Wikipedia(英)